package com.cuit.controller;


import com.cuit.pojo.FluidPic;
import com.cuit.result.R;
import com.cuit.service.FluidPicService;
import com.cuit.utils.FastDFSClientUtil;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import redis.clients.jedis.Jedis;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


@Api(tags = "轮播图管理")
@CrossOrigin
@RestController
@RequestMapping("/fluidPic")
public class FluidPicController {
    static int updateId;


    @Resource
    private FluidPicService fluidPicService;

    @Resource
    private FastDFSClientUtil fastDFS;

    private Jedis jedis = new Jedis("47.109.38.52");
//    @Resource
//    private FluidPic fluidPic;

    //获取所有轮播图
    @GetMapping("/list")
    public R selectAllPic(){
//        resort();
        jedis.auth("123456");
        Long length = jedis.llen("imgList");
        List<String> list = jedis.lrange("imgList",0,length-1);
        List<FluidPic> fluidPicList = new ArrayList<>();
//        fluidPicList.forEach(fluidPic->{
//            fluidPic.setSrc(fluidPic.getSrc());
//        });
        for (int i = 0;i < list.size();++i){
            FluidPic fluidPic = new FluidPic();
            fluidPic.setId(i+1);
            fluidPic.setSrc(list.get(i));
            fluidPic.setPid(i+1);
            fluidPicList.add(fluidPic);
        }
//        System.out.println(fluidPicList.get(0)+"\n"+fluidPicList.get(1));
        jedis.close();
        return R.ok().data("fluidPicList",fluidPicList);
    }
//    public void sortByPid(List<FluidPic> list){
//        int[] arr = new int[list.size()];
//    }

    //删除
    @GetMapping("/delete")
    public R deletePic(Integer id){
//        List<Integer> delLists = Lists.newArrayList(id);
//        List<FluidPic> fluidPics = fluidPicService.listByIds(delLists);

//        fluidPicService.removeById(id);
//        resort();
        String removeItem = jedis.lindex("imgList",id-1);
        fastDFS.delFile(removeItem);
        jedis.lrem("imgList",1,removeItem);
        return selectAllPic();
    }
//    public void resort(){
//        int num = fluidPicService.count();
//        List<FluidPic> list = fluidPicService.list();
//
//        for (int i = 1;i <= num;i++){
//            list.get(i-1).setPid(i);
//            System.out.println("resort"+i);
//            list.get(i-1).setId(list.get(i-1).getPid());
////            fluidPicService.updateByPid(list.get(i-1).getPid());
//            fluidPicService.update();
////            fluidPicService.update();
//        }
//    }

    //点击增加（不是真增加）
    @PostMapping("/add")
    public void add(MultipartFile file){
//        fluidPic.getSrc();
//        fluidPicService.save();
//        return selectAllPic();
    }

    //确认增加（真增加）
    @PostMapping("/confirmAdd")
    public R confirmAdd(MultipartFile file) throws IOException {
//        FluidPic newPic = new FluidPic();
//        newPic.setId(fluidPicService.count()+1);
//        newPic.setSrc(fastDFS.uploadFile(file));
//        newPic.setPid(fluidPicService.count()+1);
//        System.out.println("files: "+files.length);
//        for (int i = 0;i < files.length;i++){
            jedis.rpush("imgList",fastDFS.uploadFile(file));
//        }

//        fluidPicService.save(newPic);

        return selectAllPic();
//        System.out.println();
    }

    //点击修改
    @GetMapping("/update")
    public void update(Integer id){
        System.out.println("id: "+id);
        updateId = id;

    }

    //确认修改
    @PostMapping("/confirmUpdate")
    public R confirmUpdate(MultipartFile file) throws IOException{
        String oldFileName = jedis.lindex("imgList",updateId-1);
        System.out.println("oldFileName: "+oldFileName);
        jedis.lset("imgList",updateId-1,fastDFS.updateFile(oldFileName,file));
        return selectAllPic();
    }

    @GetMapping("/down")
    public R moveDown(Integer id){
        int index = id-1;
        Long length = jedis.llen("imgList");
        List<String> list = jedis.lrange("imgList",0,length-1);
//        System.out.println("id="+id+" length="+length);
        if (index < length-1){
            String temp = list.get(index);
            list.set(index,list.get(index+1));
            list.set(index+1,temp);
        }else if (index == length-1){
            String temp = list.get(index);
            list.set(index, list.get(0));
            list.set(0,temp);
        }
        for (int i = 0;i < length;i++){
            jedis.lset("imgList",i,list.get(i));
        }
        return selectAllPic();
    }

    @GetMapping("/up")
    public R moveUp(Integer id){
        int index = id - 1;
        Long length = jedis.llen("imgList");
        int len = length.intValue();
        List<String> list = jedis.lrange("imgList",0,length-1);
        if (index > 0){
            String temp = list.get(index-1);
            list.set(index-1,list.get(index));
            list.set(index,temp);
        }else if (index == 0){
            String temp = list.get(index);
            list.set(index, list.get(len-1));
            list.set(len-1,temp);
        }
        for (int i = 0;i < length;i++){
            jedis.lset("imgList",i,list.get(i));
        }
        return selectAllPic();
    }
}
